package tech.aistar.day04;

import tech.aistar.util.ArrayUtil;
import tech.aistar.util.DateUtil;

import java.util.Arrays;
import java.util.Date;

/**
 * 本类用来演示: 客户类
 *
 * @author: success
 * @date: 2022/7/21 9:44 上午
 */
public class Customer {
    private int id;

    private String name;

    private String phone;

    private Date registerDate;

    private Ord[] ordList;

    //先有对象,然后调用构造
    public Customer(){
        //进行一些初始化的工作 - new
        System.out.println("空参...");
    }

    //一旦提供任何一个带参构造,那么系统将不会再分配一个空参构造
    //带参构造
    public Customer(int id,String name){
        //this();//调用当前空参构造,必须要出现在构造的首行位置
        System.out.println("两参构造...");

        this.id = id;
        this.name = name;
    }

    //alter+insert
    //全参构造 -
    public Customer(int id, String name, String phone, Date registerDate) {
        //this(id,name);//调用两参
        this.id = id;
        //this.name = name;

        //允许直接调用setter方法
        setName(name);

        this.phone = phone;
        this.registerDate = registerDate;
    }

    //alter+insert
    //规范 - 框架都是认
    public void setId(int id){
        //通过this - 当前对象 - 区分属性和setter方法的形参 - 同名
        this.id = id;
    }

    public int getId(){
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if("王宝强".equals(name)){//参数有效性判断
            this.name = "***";
            return;
        }
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Date getRegisterDate() {
        return registerDate;
    }

    public void setRegisterDate(Date registerDate) {
        this.registerDate = registerDate;
    }

    public Ord[] getOrdList() {
        return ordList;
    }

    public void setOrdList(Ord[] ordList) {
        this.ordList = ordList;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Customer{");
        sb.append("id=").append(id);
        sb.append(", name='").append(name).append('\'');
        sb.append(", phone='").append(phone).append('\'');
        sb.append(", registerDate=").append(DateUtil.format(registerDate,"yyyy-MM-dd"));
        sb.append('}');
        return sb.toString();//StringBuilder=>String类型
    }

    //业务方法放入到实体类中
    //业务方法
    public void add(Ord o){
        //判断是否为第一次进入 - 需要初始化ordList
        if(null == ordList){
            ordList = new Ord[0];
        }
        //放一个,扩容一个,末尾放
        ordList = Arrays.copyOf(ordList,ordList.length+1);
        //末尾放
        ordList[ordList.length-1] = o;
    }

    //根据订单编号进行删除 - 修改状态
    public void delByOrdNo(String ordNo){
        if(null == ordList || ordList.length==0){
            System.out.println("sorry,该客户没有任何订单信息!");
            return;
        }

        boolean flag = false;

        for (Ord ord : ordList) {
            if(ord.getOrdNo().equals(ordNo)){
                ord.setStatus(3);
                flag = true;
                break;
            }
        }

        if(!flag){
            System.out.printf("sorry,订单号[%s]不存在!\n",ordNo);
            return;
        }
    }

    //查找所有删除的订单
    public Ord[] findByStatus(int status){
        if(null == ordList || ordList.length==0){
            System.out.println("sorry,该客户没有任何订单信息!");
            return null;
        }

        //int count = 0;
        //
        //for (Ord ord : ordList) {
        //    if(ord.getStatus()==status){
        //        count++;
        //    }
        //}
        //
        //Ord[] temp = new Ord[count];
        //int pos = 0;
        //
        //for (Ord ord : ordList) {
        //    if(ord.getStatus()==status){
        //        temp[pos++] = ord;
        //    }
        //}

        Ord[] temp = Arrays.copyOf(ordList,ordList.length);
        Arrays.fill(temp,null);
        int pos = 0;
        for (Ord ord : ordList) {
            if(ord.getStatus()==status){
                temp[pos++] = ord;
            }
        }
        return Arrays.copyOf(temp,pos);
    }

    //打印这个客户所有的订单信息
    public void printOrdList(){
        if(null == ordList || ordList.length==0){
            System.out.println("sorry,该客户没有任何订单信息!");
            return;
        }
        System.out.println("\t订单信息如下:>");
        for (Ord ord : ordList) {
            System.out.println("\t"+ord);
        }
    }
}
